#ifndef GY_COMBOXDELEGATE_H
#define GY_COMBOXDELEGATE_H

#include "GY_ControlLibrary_global.h"
#include <QStyledItemDelegate>
#include <QComboBox>

/** 自定义下拉框控件
 * @brief The GY_ComboxDelegate class
 */
class GY_CONTROLLIBRARY_EXPORT GY_ComboxDelegate: public QStyledItemDelegate
{
    Q_OBJECT
public:
    GY_ComboxDelegate(QWidget *parent=nullptr);

    /**
     * @brief setItems 仅设置文字
     * @param texts 所包含的文字
     */
    void setItems(const QStringList &texts);
    /**
     * @brief setIndex 设置位置及文字
     * @param row 行
     * @param column 列
     */
    void setIndexText(const int row, const int column,const QStringList &texts);

    //-----------------------------------------------重写函数--------------------------------------------------
    /**
     * @brief createEditor 创建下拉框控件
     * @param parent 父对象
     * @param option 位置
     * @param index 索引
     * @return
     */
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    /**
     * @brief setEditorData 编辑的时候设置数据到上面的editor中
     * @param editor 控件
     * @param index 索引
     */
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    /**
     * @brief setModelData 编辑完成，保存数据到data
     * @param editor 控件
     * @param model 模型
     * @param index 索引
     */
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    /**
     * @brief updateEditorGeometry 设置控件的位置和大小，样式等
     * @param editor 控件
     * @param option 位置
     * @param index 索引
     */
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const  QModelIndex &index) const;

private:
    QStringList m_comboxList;    //下拉框列表项
    QMap<int,int> m_index; //记录行列
    QMap<int,QStringList> m_indexText; //记录文字
};

#endif // GY_COMBOXDELEGATE_H
